/**
  ******************************************************************************
  * @file    mw_config.h
  * @author  ashuai0110
  * @version V2.4
  * @date    2024-09-05
  * @brief   组件配置宏(所有组件都需包含此文件)
  *
  ******************************************************************************
  * @attention
  *
  * 版权声明:内容为编者(ashuai0110)原创,使用请注明出处,当然,你也可以不这样做^_^
  * 出处链接:https://gitee.com/ashuai0110/mcu_reuse_development_module.git
  *
  * Change Logs:
  * Date          Author        Notes
  * 2024-09-05    ashuai0110    完成基本内容
  * 
  ******************************************************************************
  */

#ifndef __MODULE_CONFIG_H
#define __MODULE_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* 包含头文件-----------------------------------------------------------------*/
/* 引入MCU头文件 */
#include "stm32f10x.h"
/* 引入日志输出头文件 */
#include "SEGGER_RTT.h"

/**
 * @addtogroup common
 * @{
 */

/**
 * @addtogroup mw_config
 * @{
 */

/* 宏定义---------------------------------------------------------------------*/
/**
 * @defgroup common_include_user_macros common include user macros
 * @brief    common_include相关参数宏(用户按需修改)
 * @note     此宏不可被删除,除此宏外,其余宏若不使用可删除或注释
 * @{
 */
#define _MW_PRINT_LOG                           (1u) /*!< 打印接口开关 0:关闭 1:打开 */
#define _MW_ASSERT_PARAM                        (1u) /*!< 参数检查接口开关 0:关闭 1:打开 */
#define _MW_TIME_STAMP                          (0u) /*!< 时间戳相关内容开关 0:关闭 1:打开 */
#define _MW_INTERRUPT_CTRL                      (0u) /*!< 全局中断控制接口开关 0:关闭 1:打开 */

#if _MW_PRINT_LOG
/* 日志输出原始接口 用户需引入相关头文件并自行修改宏内容 */
#define MW_PRINT_FUNC(fmt, args...)             SEGGER_RTT_printf(0, fmt, ##args)
#endif
#if _MW_INTERRUPT_CTRL
/* 使能全局中断原始接口 用户需引入相关头文件并自行修改宏内容 */
#define MW_ENABLE_INT_FUNC()                    __enable_irq()
/* 失能全局中断原始接口 用户需引入相关头文件并自行修改宏内容 */
#define MW_DISABLE_INT_FUNC()                   __disable_irq()
/* 获取屏蔽中断原始接口 用户需引入相关头文件并自行修改宏内容 */
#define MW_GET_BASEPRI_FUNC()                   __get_BASEPRI()
/* 设置屏蔽中断原始接口 用户需引入相关头文件并自行修改宏内容 */
#define MW_SET_BASEPRI_FUNC(x)                  __set_BASEPRI((x))
#endif
/**
 * @}
 */

/**
 * @defgroup bootloader_user_macros bootloader user macros
 * @brief    bootloader相关参数宏(用户按需修改)
 * @{
 */
/* 设置栈顶指针原始接口 用户需引入相关头文件并自行修改宏内容 */
#define BOOT_SET_STACK_POINT(addr)              __set_MSP((addr))

#define BOOT_ROM_START_ADDR                     (0x8000000) /*!< MCU ROM起始地址 */
#define BOOT_RAM_START_ADDR                     (0x20000000) /*!< MCU RAM起始地址 */
#define BOOT_RAM_TOTAL_SIZE                     (0x2800)    /*!< MCU RAM总大小 */
/* /-------------------flash分区规划------------------\
 * | bootloader | application | factory | updata info |
 * |    xxx     |     xxx     |   xxx   |      8      |
 * \--------------------------------------------------/ */
#define BOOT_ADDR_OFFSET                        (0x0) /*!< 升级引导程序起始地址偏移量 */
#define BOOT_SIZE_MAX                           (0x2C00) /*!< 升级引导程序最大大小 */
#define BOOT_APP_ADDR_OFFSET                    (BOOT_ADDR_OFFSET + BOOT_SIZE_MAX + 0x0) /*!< 应用程序起始地址偏移量 */
#define BOOT_APP_SIZE_MAX                       (0x2800) /*!< 应用程序最大大小 */
#define BOOT_FACTORY_ADDR_OFFSET                (BOOT_APP_ADDR_OFFSET + BOOT_APP_SIZE_MAX + 0x0) /*!< 备份(出厂)程序起始地址偏移量 */
#define BOOT_FACTORY_SIZE_MAX                   (0x2800) /*!< 备份(出厂)程序最大大小 */
/* 升级信息存放起始地址偏移量 (应处于BOOT,APP,FACTORY存储之外的FLASH扇区,保证不会被意外擦除或改写) */
#define BOOT_INFO_ADDR_OFFSET                   (BOOT_FACTORY_ADDR_OFFSET + BOOT_FACTORY_SIZE_MAX  + 0x0)
#define BOOT_VERSION                            (0x100) /*!< bootloader版本号 0x100 = V1.0.0 */
/**
 * @}
 */

/**
 * @defgroup ymodem_user_macros ymodem user macros
 * @brief    ymodem相关参数设置(用户按需修改)
 * @{
 */
#define YMODEM_FILE_NAME_LEN                    (32u) /*!< 文件名长度(即文件名缓冲区长度),超出可能导致文件名解析失败 */
/**
 * @}
 */

/* 类型定义-------------------------------------------------------------------*/

/* 全局变量-------------------------------------------------------------------*/

/* 函数原型-------------------------------------------------------------------*/

/**
 * @}
 */

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* mw_config.h */
